/**
 * @asignatura: Procesadores de Lenguajes.
 * @autor:      Anthony Vittorio Russo Cabrera
 * @curso:      2012/2013
 * @practica:   02 - Pseudo-Analizador Lexico
 * @descripcion:
 * Practica 2: Comenzando con Analizador Lexico
 * En la practica de esta semana vamos a plantear el acercamiento a un 
 * analizador lexico. Objetivo: Construir un pseudo-analizador lexico que cumpla
 * con las siguientes tareas:
 *  1.- Detectar que un codigo JAVA se encuentran dentro del conjunto de 
 *  caracteres especificado en un fichero, este puede venir dado por un fichero
 *  de texto o por un XML.
 *  2.- Detectar que este codigo JAVA, las palabras reservadas que 
 *  especificaremos en un fichero, este puede venir dado por un fichero de texto
 *  o por un XML.
 *  3.- Detectar el conjunto de bloques y especificarlos en la salida de la
 *  practica.
 *  4.- La practica debe contener un test unitario para cada uno de las tareas
 *  mencionadas. Y debe ser compilada y ejecutada a traves de un fichero ANT.
 *  5.- La practica debe tener sus propios test de comprobacion
 */
package pl.p02;

public class PseudoLexer {

  public static void main(String[] args) {
    if (args.length == 3) {
      Blocks blocks = new Blocks();
      Symbols symbols = new Symbols(args[0]);
      Keywords keywords = new Keywords(args[1]);
      SourceFile source = new SourceFile(args[2]);
      LexicalException.file = source;

      String line = null;
      while ((line = source.readLine()) != null) {
        try {
          symbols.parse(line);
          keywords.parse(line);
          blocks.parse(line);
        } catch (LexicalException e) {
          System.err.println(e.getErrorDescription());
        }// try-catch
      }// while

      System.out.print(keywords.report());
      System.out.print(blocks.report());

      try {
        blocks.check();
      } catch (LexicalException e) {
        System.err.println(e.getErrorDescription());
      }// try-catch

    } else {
      System.out
          .println("java PseudoLexer symbols.(txt|xml) keywords.(txt|xml) source.java");
    }// if-else
  }// main

}// PseudoLexer
